package com.ftg.learn.demo;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * annotation base configuration
 *  -- 注解
 * Component : 把当前注解所修饰的类，注入到spring container当中 做为组件
 * 注入完成以后id为 默认值 类名首字母小写以后的类名 elephant
 * Component(value = "abc") id为abc
 * PostConstruct ： 表示它修饰的这个方法在实例完成以后一定会执行一次
 * PreDestroy  :  在当前实例消毁之前这个方法要走一次
 * Lazy 开启懒加载
 * value 默认值
 * Autowired 自动装配
 * Resource  也是自动装配jsr250
 * primary   指定某一个实现类，或者子类成为主要实例，当接口或者父类没有指定实例的时候，采用当前这个类
 * Qualifier  通过bean的名称，来指定当前接口或者父类采用哪个一个实例
 *
 * 功能注解
 * Service : 与component一致,作为业务逻辑组件
 * Mapper  : 与component一致,作为mybatis mapper组件来使用
 * Repository : 与component一致,作为dao组件
 * Controller : 与component一致,作为前端控制器组件
 * RestController : 与Controller一致，作为前端控制器组件，只是所有的方法不能实现跳转页面
 *
 * @author kangjx
 * @date 2022/8/12
 */
@Data
@Repository
@Scope(value = "prototype")
@Lazy
@SuppressWarnings({"all"})
public class Elephant {

    void test1(){

    }

    public Elephant(){
        System.out.println("321321313213213--->");
    }

    @PostConstruct
    public void abc(){
        System.out.println("我是ABc");
    }

    @Value("123")
    private int sno;

    @Value("张三")
    private String sname;

    @Autowired
    @Qualifier("shanren")
    private Iwork iwork;

    private Peishi pe;

    @Autowired
    public void setPeishi(Peishi pe){
        this.pe = pe;
    }

}
